﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FacebookApp;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
using System.Text;
using facebook.Schema;
using facebook.web;
using System.Xml;

public partial class Pages_RegisterOrder : System.Web.UI.Page
{
    int rrandom = 0;
    int grandom = 0;
    int brandom = 0;
    static string groupduser_id;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            pnRegister.Visible = true;
            pnRegisterSuccessfull.Visible = false;
            //CreateCaptcha();
            RefreshCaptcha();
           // txtUserName.Focus();

            //khong phai thanh vien
            if (Session["WB_UserId"] != null)
            {
                //WebMsgBox.Show(Session["WB_UserId"].ToString());
                User u = UserService.User_GetById(Session["WB_UserId"].ToString());
                txtFB_Id.Text = u.FB_Id.ToString();
                txtFullName.Text = u.FullName;
                txtAddress.Text = u.Address;
                txtPhone.Text = u.Phone;
                txtMail.Text = u.Email;
                
                groupduser_id = u.GroupUser_Id.ToString();
            }
            else
            {
                //List<string> info = GetUserInfo.GetAll(Master.API.uid.ToString());
                //if (info.Count > 0)
                //{
                //    txtFullName.Text = info[1];
                //    txtMail.Text = info[0];
                //}
                //Lay thong tin user hien tai
                StringReader data = new StringReader(Master.API.fql.query("SELECT name,email FROM user WHERE uid = " + Master.API.uid.ToString()));

                XmlTextReader reader = new XmlTextReader(data);
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                XmlNode node;

                node = doc.GetElementsByTagName("name").Item(0);
                if (node.HasChildNodes)
                    txtFullName.Text = node.FirstChild.Value;
                node = doc.GetElementsByTagName("email").Item(0);
                if (node.HasChildNodes)
                    txtMail.Text = node.FirstChild.Value;

                //facebook.Schema.user u = Master.API.users.getInfo(Master.API.uid);

                txtFB_Id.Text = Master.API.uid.ToString();
                //txtFullName.Text = u.name;
                txtAddress.Text = "";
                txtPhone.Text = "";
               // txtMail.Text = Master.API.fql.query("SELECT email FROM user WHERE uid = " + Master.API.uid.ToString());// u.email_hashes.email_hashes_elt[0];
                
                groupduser_id = "3";
             
            }

            
        }
    }
    private void RefreshCaptcha()
    {
        DirectoryInfo dr = new DirectoryInfo(Server.MapPath("~/Data/App/Captcha/"));
        foreach (FileInfo f in dr.GetFiles())
        {
            f.Delete();
        }
        captchaImage.ImageUrl = CreateCaptcha();
    }
    public string CreateCaptcha()
    {
        const byte LENGTH = 5;
        // chiều dài chuỗi để lấy các kí tự sẽ sử dụng cho captcha
        const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        using (Bitmap bmp = new Bitmap(120, 35))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                // Tạo nền cho ảnh dạng sóng
                HatchBrush brush = new HatchBrush(HatchStyle.Percent80, Color.White, Color.Tan);
                g.FillRegion(brush, g.Clip);
                // Lưu chuỗi captcha trong quá trình tạo
                StringBuilder strCaptcha = new StringBuilder();
                Random rand = new Random();
                float locationX = 3;
                for (int i = 0; i < LENGTH; i++)
                {
                    // Lấy kí tự ngẫu nhiên từ mảng chars
                    SolidBrush brushes = new SolidBrush(GetRandomColor());
                    string str = chars[rand.Next(chars.Length)].ToString();
                    strCaptcha.Append(str);
                    // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                    Font font = new Font("Times New Roman", new Random().Next(14, 17), FontStyle.Bold);
                    // Lấy kích thước của kí tự
                    SizeF size = g.MeasureString(str, font);
                    // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                    g.DrawString(str, font, brushes, locationX, rand.Next(2, 10));
                    font.Dispose();
                    //định location X
                    locationX += size.Width + i;
                }
                // Lưu captcha vào session
                Session["captcha"] = strCaptcha.ToString();
                // Ghi ảnh trực tiếp ra luồng xuất theo định dạng gif
                //Response.ContentType = "image/GIF";4
                int numRandom = new Random().Next(1, 3000);
                string imgFile = "captcha" + numRandom + ".jpg";
                string directoryCaptcha = "~/Data/App/Captcha/";
                // Kiểm tra thư mục đã tồn tại
                if (!Directory.Exists(Server.MapPath(directoryCaptcha)))
                {
                    Directory.CreateDirectory(Server.MapPath(directoryCaptcha));
                }
                //lấy thông tin thư mục
                DirectoryInfo direcInfo = new DirectoryInfo(Server.MapPath(directoryCaptcha));
                foreach (FileInfo file in direcInfo.GetFiles(".jpg"))
                {
                    try
                    {
                        //Xóa tất cả các tập tin hình trong thư mục hiện tại
                        file.Delete();
                    }
                    catch { }
                }
                bmp.Save(Server.MapPath(directoryCaptcha + imgFile));
                return directoryCaptcha + imgFile;
            }
        }
    }

    private Color GetRandomColor()
    {
        Random rnd = new Random();
        int ri = rnd.Next(255);
        if (ri == rrandom)
        {
            ri = rnd.Next(255);
        }
        else
        {
            rrandom = ri;
        }
        int gi = rnd.Next(255);
        if (gi == grandom)
        {
            gi = rnd.Next(255);
        }
        else
        {
            grandom = gi;
        }
        int bi = rnd.Next(255);
        if (bi == brandom)
        {
            bi = rnd.Next(255);
        }
        else
        {
            brandom = bi;
        }
        byte r = Convert.ToByte(ri);
        byte g = Convert.ToByte(gi);
        byte b = Convert.ToByte(bi);
        return Color.FromArgb(r, g, b);
    }

    protected void btnRegister_Click(object sender, EventArgs e)
    {
        #region [TestInput]

        if (txtFullName.Text == "")
        {
            WebMsgBox.Show("Vui lòng nhập họ tên!");
            txtFullName.Focus();
            return;
        }

        if (txtAddress.Text == "")
        {
            WebMsgBox.Show("Vui lòng nhập địa chỉ!");
            txtAddress.Focus();
            return;
        }

        if (txtPhone.Text == "")
        {
            WebMsgBox.Show("Vui lòng nhập số điện thoại!");
            txtPhone.Focus();
            return;
        }  

        if (txtMail.Text == "")
        {
            WebMsgBox.Show("Vui lòng nhập Email để xác nhận thông tin!");
            txtMail.Focus();
            return;
        }      

        if (txtCaptcha.Text != Session["captcha"].ToString())
        {
            WebMsgBox.Show("Sai mã bảo vệ!");
            txtCaptcha.Focus();
            return;
        }

        #endregion        

        OrderInfo obj = new OrderInfo();        
        obj.FullName = txtFullName.Text;
        obj.Email = txtMail.Text;
        obj.Address = txtAddress.Text;
        obj.Phone = txtPhone.Text;
        obj.Status = "0";        
        obj.GroupUser_Id = groupduser_id;
        //WebMsgBox.Show(obj.GroupUser_Id + "/" + groupduser_id);
        obj.TotalMoney = Session["totalprice"].ToString();
        obj.FB_Id = txtFB_Id.Text;
        try
        {
            string order_id = OrderService.Order_Insert(obj);
            //string order_id = "8";
            if (order_id != "-1")//tao order thanh cong
            {
                Save_OrderDetail(order_id);
                
            }
            else
            {
                WebMsgBox.Show("Tạo order bị lỗi");
            }

        }
        catch
        {
            WebMsgBox.Show("Tạo order bị lỗi");
            //ControlClass.ResetControlValues(pnRegister);
        }

    }

    public void Save_OrderDetail(string OrderID)
    {
        try
        {
            decimal sessiontotalprice = 0;
            Label lblProductID;
            Label lbltotal;
            TextBox txtQuantity;
            string MailBody = "Sản phẩm đặt mua:\n";
            Repeater rptOrder = (Repeater)Session["rptOrder"];
            for (int i = 0; i < rptOrder.Items.Count; i++)
            {
               
                OrderDetailInfo obj1 = new OrderDetailInfo();
                var lblProductName = (Label)rptOrder.Items[i].FindControl("lblProductName");
                
                //Label lbltotalprice1 = (Label)rptOrder.Items[i].FindControl("lbltotal");
                lblProductID = (Label)rptOrder.Items[i].FindControl("lblproductid");
                lbltotal = (Label)rptOrder.Items[i].FindControl("lbltotal");
                txtQuantity = (TextBox)rptOrder.Items[i].FindControl("txtquantity");
                MailBody += "\t" + lblProductName.Text + " --- Số lượng: " + txtQuantity.Text + " --- Thành tiền: " + lbltotal.Text + "\n";
                obj1.Order_Id = OrderID;
                obj1.Ebook_Id = lblProductID.Text;
                obj1.Quantity = txtQuantity.Text;
                obj1.Money = lbltotal.Text.Replace(".","").Replace("VNĐ","").Trim();
                //WebMsgBox.Show("Tạo order bị lỗi" + lbltotalprice1.Text.Replace(".","").Replace("VNĐ","").ToString());
                sessiontotalprice += Decimal.Parse(obj1.Money);
                
                OrderDetailService.OrderDetail_Insert(obj1);
            }
            MailBody += "Tổng tiền: " + Format_Price(sessiontotalprice.ToString());

            SendMail.Mail(txtMail.Text, MailBody, "[eBookStore - Facebook] Thông báo đơn đặt hàng");
            pnRegister.Visible = false;
            pnRegisterSuccessfull.Visible = true;
        }
        catch (Exception e)
        {
            WebMsgBox.Show(e.Message);
        }
    }

    protected string Format_Price(string s)
    {
        return FunctionClass.Format_Price(s);
    }
    protected void btrefresh_Click(object sender, EventArgs e)
    {
        pnRegister.DataBind();
        ControlClass.ResetControlValues(pnRegister);
    }

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        RefreshCaptcha();
    }
}